package com.gz.common.mongodb.utils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @ClassName ClassUtil
 * @Description //
 * @Author WHX
 * @Date 2021/8/19 23:40
 **/
public class ClassUtil {
    /**
     * 获取所有属性，包括父类属性，直到Object
     *
     * @param cl
     * @return
     */
    public static List<Field> getAllDeclaredFields(Class<?> cl) {
        List<Field> allFields = new ArrayList<>();

        while (cl != Object.class) {
            Field[] declaredFields = cl.getDeclaredFields();
            if (declaredFields.length != 0) allFields.addAll(Arrays.asList(declaredFields));
            cl = cl.getSuperclass();
        }
        return allFields;

    }

    /**
     * 判断是否为基本类型，或基本类型的包装类，或字符串
     * @param cl
     * @return
     */
    public static boolean isBasicClass(Class<?> cl) {
        // 字符串类型
        if (String.class == cl) return true;
        // 基本数据类型
        if(cl.isPrimitive()) return true;
        // 基本数据类型的包装类
        try {
            return ((Class<?>)(cl.getField("TYPE").get(null))).isPrimitive();
        } catch (IllegalAccessException | NoSuchFieldException e) {
            return false;
        }
    }
}
